#-*- coding: utf-8 -*-
'''
@author : Bruno Rendeiro 11236  \
			& André Simão 6039
@date : 17 de outubro de 2014
@obs : 1 parte
Lê o ficheiro excel e envia os valores para sqlite3
'''


import xlrd
#  utilizacao da biblioteca sqlite 3
import sqlite3

def leitura(arq_xls):
    """
    Gerador que lê arquivo .xls
    """

    # Abre o arquivo
    xls = xlrd.open_workbook(arq_xls)
    
    plan = xls.sheets()[0]

    
    for i in range(1,plan.nrows):
        # Le os valores nas linhas 
        yield plan.row_values(i)



def preencher_listas(listaAno,listaIpc,listaTaxa,listaMinimo,listaMaximo,listaPib,listaNacional,listaDisponivel,listaRenumeracao,listaEvoMin,listaEvoMax):
	'''
	Preencher_listas() - preenche as listas com os dados que se encontram no ficheiro .xls
	listaAno - Lista dos anos
	listaIpc - Lista IPC global
	listaTaxa - Lista da Variacao anual(Taxa de inflacao)
	listaMinimo - Lista da Remuneração minima mensal
	listaMaximo - Lista da renumeracao maxima mensal
	listaPib -  Lista do PIB per capita anual
	listaNacional - Lista do Rendimento nacional bruto per capita anual
	listaDisponivel - Rendimento disponível bruto per capita anual
	listaRenumeracao - Remunerações per capita anual
	listaEvoMin - Lista da evolucao das remuneracoes minimas mensais dos funcionarios publicos a precos constantes;
	listaEvoMax - Lista da evolucao das remuneracoes maxima mensais dos funcionarios publicos a precos constantes;
	
	'''

	for linha in leitura('IPC_Portugal_1977_2013.xls'):
		listaAno.append(linha[ 1 ]);listaIpc.append(linha[ 2 ]);listaTaxa.append(linha[ 3 ]);listaMinimo.append(linha[ 4 ]);
		listaMaximo.append(linha[ 5 ]);listaPib.append(linha[ 6 ]);listaNacional.append(linha[ 7 ]);listaDisponivel.append(linha[ 8 ]);listaRenumeracao.append(linha[ 9 ])
		
		

	'''
	Calcula a evolução das remunerações minima e maxima 
	'''
	for i in range(0, (len(listaAno)-1)):	
			listaEvoMin.append(listaMinimo[i]*((listaTaxa[i+1]/100)+1))
			listaEvoMax.append(listaMaximo[i]*((listaTaxa[i+1]/100)+1))
	listaEvoMin.append("")
	listaEvoMax.append("")
	return(listaAno,listaIpc,listaTaxa,listaMinimo,listaMaximo,listaPib,listaNacional,listaDisponivel,listaRenumeracao,listaEvoMin,listaEvoMax)
	



def create_table():
	'''
	cria as tabelas e o ficheiro da bd
	'''

	connection=sqlite3.connect('IPC_Portugal.db')
	c=connection.cursor()

	# Substitui os dados se ja existirem la dados
	c.execute("DROP TABLE IF EXISTS dados")


#SQL


	c.execute('CREATE TABLE IF NOT EXISTS dados(\
	ano INTEGER,\
	ipc INTEGER,\
	taxa_inflacao INTEGER, \
	renu_min INTEGER,\
	renu_max INTEGER,\
	pib INTEGER, \
	rendimento_nacional INTEGER, \
	rendimento_disp INTEGER, \
	renum_capita INTEGER, \
	evol_min, \
	evol_max)')
	
	#sem commit() os dados nao ficam na base de dados
	connection.commit ( )
	print("tabela criada")
	connection.close ( )



def preencher_tabelas(listaAno,listaIpc,listaTaxa,listaMinimo,listaMaximo,listaPib,listaNacional,
						listaDisponivel,listaRenumeracao,listaEvoMin,listaEvoMax):
	'''
	Preenche as tabelas
	'''
	#connection − conexao ao ficheiro de base de dados
	connection=sqlite3.connect('IPC_Portugal.db')
	
	# o cursor e um iterador de posicao na base de dados
	c=connection.cursor()
	for i in range(0, len(listaAno)):
		
		c.execute("INSERT INTO dados(\
		ano,\
		ipc,\
		taxa_inflacao,\
		renu_min , \
		renu_max , \
		pib , \
		rendimento_nacional, \
		rendimento_disp , \
		renum_capita,\
		evol_min, \
		evol_max )\
		VALUES(?,?,?,?,?,?,?,?,?,?,?)",\
		(listaAno[i],listaIpc[i],listaTaxa[i],listaMinimo[i],listaMaximo[i] ,listaPib[i],listaNacional[i],listaDisponivel[i],listaRenumeracao[i],listaEvoMin[i],listaEvoMax[i]))

	#sem commit() os dados nao ficam na base de dados
	connection.commit ( )
	print("dados inseridos")
	connection.close ( )
